#define _CRT_SECURE_NO_WARNINGS

#include "test.h"

//class BLZ
//{
//public:
//	int _a;
//	int Add(int a, int b)
//	{
//		return a + b;
//	}
//private:
//	int _blz;
//	int MyAdd(int a, int b)
//	{
//		return a + b + _blz;
//	}
//};
//
//int main()
//{
//	Add(1, 2);
//	BLZ a;
//
//	return 0;
//}


////声明和定义分离, 需要指定类域
//void Stack::Init(int n)
//{
//	array = (int*)malloc(sizeof(int) * n);
//	if (nullptr == array)
//	{
//		perror("malloc failed");
//		return;
//	}
//	capacity = n;
//	top = 0;
//}
//
//int main()
//{
//	Stack st;
//	st.Init();
//	//Stack* const pst;
//	return 0;
//}

//#include <iostream>
//using namespace std;
//
//struct MyStruct
//{
//    char a;      // 1 byte
//    int b;       // 4 bytes (需要从地址上看是否有填充)
//};
//
//class MyClass
//{
//public:
//    char a;     // 同样是1 byte
//    int b;      // 同样也是4 bytes
//};
//
//int main()
//{
//    cout << "Size of MyStruct: " << sizeof(MyStruct) << endl;
//    cout << "Size of MyClass: " << sizeof(MyClass) << endl;
//
//    return 0;
//}

//class BLZ
//{
//public:
//    int _blz;
//    //void PrintVal(BLZ* const this)//在参数列表中这样显式地写出来是不允许的
//    BLZ& PrintVal()
//    {
//        std::cout << _blz << std::endl;
//        std::cout << this->_blz << std::endl;//成员函数内可以使用 this
//        //但是我们实际上并不会这样写, 因为这种情况下加不加 this 都一样
//        return *this;
//    }
//    BLZ& Add(int n)
//    {
//        _blz += n;
//        std::cout << _blz << std::endl;
//        return *this;
//    }
//};
//
//int main()
//{
//    int* arr = (int*)malloc(100 * sizeof(int));
//    free(arr);
//    BLZ a;
//    a._blz = 1;
//    BLZ* const pa = &a;
//    //a.PrintVal(pa);//这样显式地传参也是不允许的
//    a.PrintVal().Add(10).PrintVal();
//
//    return 0;
//}
//using namespace std;
//
//class Rectangle
//{
//
//private:
//
//    int length, width;//成员变量表示长方形的长和宽
//
//public:
//
//    //constructor
//
//    Rectangle()//不带参数构造函数中，给length和width分别赋默认值2和1
//    {
//        length = 2;
//        width = 1;
//    }
//    
//    Rectangle(int width)//带一个参数构造函数中，传递参数值赋值给width，length值为参数值的二倍
//    {
//        this->width = width;
//        length = 2 * width;
//    }
//
//    Rectangle(int length, int width)//第一个参数传递给length，第二个传递给width
//    {
//        this->length = length;
//        this->width = width;
//    }
//
//    Rectangle(const Rectangle& rec)//复制构造函数
//    {
//        this->width = rec.width;
//        this->length = rec.length;
//    }
//
//    //getter 读取属性值
//
//    int getLength()
//    {
//        return length;
//    }
//
//    int getWidth()
//    {
//        return width;
//    }
//
//    //setter 修改属性值
//
//    void setLength(int length)
//    {
//        this->length = length;
//    }
//
//    void setWidth(int width)
//    {
//        this->width = width;
//    }
//
//    //计算面积
//
//    int getArea()
//    {
//        return length * width;
//    }
//
//    //计算周长
//
//    int getPerimeter()
//    {
//        return 2 * (length + width);
//    }
//
//    //输出函数，如果当前长方形长和宽分别为2和1，则输出
//
//    //rectangle:length=2,width=1,area=2,perimeter=6
//
//    //在该函数中调用成员函数getArea()和getPerimeter()
//
//    void show()
//    {
//        cout << "rectangle:length ="
//            << length
//            << ",width="
//            << width
//            << ",area="
//            << (*this).getArea()
//            << ",perimeter="
//            << (*this).getPerimeter()
//            << endl;
//    }
//
//};
//
//int compare(const void* a, const void* b)
//{
//    Rectangle* x = (Rectangle*)a;
//    Rectangle* y = (Rectangle*)b;
//    return x->getPerimeter() - y->getPerimeter();
//}
//
//int main()
//{
//
//    int n, len, wid;
//
//    cin >> n;//输入长方形个数
//
//    Rectangle* p = new Rectangle[n];
//
//    //读入长方形属性值
//
//    for (int i = 0; i < n; i++)
//    {
//        cin >> len >> wid;
//
//        p[i].setLength(len);
//
//        p[i].setWidth(wid);
//
//    }
//
//    //按照周长从小到大顺序对所有长方形对象排序
//    qsort(p, n, sizeof(Rectangle), compare);
//    //输出排序后的长方形数组
//    for (int i = 0; i < n; i++)
//    {
//        p[i].show();
//    }
//
//    delete[] p;
//
//    return 0;
//
//}

#include<iostream>
using namespace std;
//class A
//{
//public:
//	//A(int a = 10) {}
//	void Print()
//	{
//		cout << "A::Print()" << endl;
//		cout << _a << endl;
//	}
//	int val;
//	//A() {}
//private:
//	A() {}
//	int _a;
//};

class A
{
public:
	int _val1;
	char _val2;
	A(int val1 = 100, char val2 = 100)
	{
		_val1 = val1;
		_val2 = val2;
	}
	void Print()
	{
		cout << "A::Print()" << endl;
		cout << _val1 << endl;
		cout << _val2 << endl;
	}
};


class BLZ
{
public:
	A val;
	void Print()
	{
		//cout << val.val << endl;
	}
	//private:
	//	BLZ(int a = 10) {}
};

int main()
{
	A* p = nullptr;
	//p->Print();
	A a(10, 120);
	a.Print();
	BLZ blz;
	blz.Print();



	return 0;
}